package com.example.jingwei.tian.nativeh5test;

import android.content.Context;
import android.graphics.Bitmap;
import android.net.http.SslError;
import android.util.Log;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * Created by tian.jingwei on 2018/3/28.
 */

public class MWebViewClient extends WebViewClient {
    private static final String TAG = "MWebViewClient";
    private WebView mWebView;
    private Context mContext;

    public MWebViewClient(WebView webView, Context context) {
        mWebView = webView;
        mContext = context;
    }

    /**
     * 在点击请求的是链接是才会调用，
     * 重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转，不跳到浏览器那边。
     */
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // 使用自己的WebView组件来响应Url加载事件，而不是使用默认浏览器器加载页面
        mWebView.loadUrl(url);
        // 记得消耗掉这个事件。给不知道的朋友再解释一下，Android中返回True的意思就是到此为止,
        // 事件就会不会冒泡传递了，我们称之为消耗掉
        return true;
    }

    /**
     * 页面开始加载时调用的方法
     * @param view
     * @param url
     * @param favicon
     */
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        Log.e(TAG, "onPageStarted: " );
        super.onPageStarted(view, url, favicon);
    }

    /**
     * 页面加载完成调用的方法
     * @param view
     * @param url
     */
    @Override
    public void onPageFinished(WebView view, String url) {
        Log.e(TAG, "onPageFinished: " );
        super.onPageFinished(view, url);
    }

    /**
     * 在加载页面资源时会调用，每一个资源（比如图片）的加载都会调用一次。
     */
    @Override
    public void onLoadResource(WebView view, String url) {
//      Toast.makeText(context, "WebViewClient.onLoadResource", Toast.LENGTH_SHORT).show();
        Log.e("WebActivity", "onLoadResource");
        super.onLoadResource(view, url);
    }

    /**
     * 重写此方法可以让WebView支持https请求
     * @param view
     * @param handler
     * @param error
     */
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        super.onReceivedSslError(view, handler, error);
    }
}